package org.pub.app.lunch;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class LunchSelector extends Activity {
	private final String TAG = "LunchSelector";
	private Button gpsButton = null;
	private Button addrButton = null;
//	private TextView gpsText = null;
//	private boolean isLoadGps = false;
	private LocationManager locationManager;	
	private Context context;
	private String provider;
	
	private GpsLocationListener listener = null;
	
//	private final static int SLEEP_TIME = 3000;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.context = this.getBaseContext();
        setContentView( R.layout.lunchemain );      
       
        loadGps();
        
//      new Thread( timerThread ).start();
        gpsButton = (Button)findViewById( R.id.btn_gps_search );
        addrButton = (Button)findViewById( R.id.btn_addr_search );
        
        gpsButton.setOnClickListener( 
        		new View.OnClickListener(){				
					public void onClick(View v) {
						Log.w(TAG , "onStatusChanged" );
						Intent in = new Intent( context , RestaurantList.class );
						Location loc = null;
												
						loc = getLocation();
												
						if( loc == null ) {
							Log.w( TAG , "location is null" );
						
							AlertDialog.Builder adb = new AlertDialog.Builder(LunchSelector.this);
							adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog, int which) {
								}
							});
					    	adb.setTitle( R.string.alert_title );
					    	adb.setMessage(R.string.alert_message);
					    	adb.show();
						} else {
							in.putExtra( "MY CURRENT LOCATION", new Location(loc) );
							startActivity( in );
						}
					}

					private Location getLocation() {
										
						Location location = locationManager.getLastKnownLocation( provider );
						if ( location == null ) {
							Log.w(TAG, "get Location From GPS Fail !!!!!");
							location = locationManager.getLastKnownLocation( LocationManager.NETWORK_PROVIDER );
						}
						return location;
					}
				}
        );
        
        addrButton.setOnClickListener(
        		new View.OnClickListener(){				
					public void onClick(View v) {
						//주소 입력 화면으로 옮겨주자.. 
						Intent in = new Intent( context , InputAddress.class );
						startActivity( in );
					}
				}
        );
    }
    
//    Handler msgHandle = new Handler( ){
//    	public void handleMessage(Message message) {
//    		switch( message.what ){
//    		case R.id.message_timer_end:
//    			alertUsingGps();
//    			break;
//    		}
//    	}
//    };
//    
//    /**
//     * 
//     */
//    Runnable timerThread = new Runnable(){
//    	public void run(){
//    		try{
//    			Thread.sleep( SLEEP_TIME );
//    			msgHandle.sendEmptyMessage( R.id.message_timer_end );
//    		}catch( Exception e ){
//    			Log.w( TAG , e );
//    		}
//    	}
//    };
//    
//    public void alertUsingGps() {
//    	
//    	AlertDialog.Builder adb = new AlertDialog.Builder(this);
//    	adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
//			
////			@Override
//			public void onClick(DialogInterface dialog, int which) {
//				loadGps();
//			}
//		});
//    	adb.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {			
////			@Override
//			public void onClick(DialogInterface dialog, int which) {
//			}
//		});
//    	adb.setTitle( R.string.alert_title );
//    	adb.setMessage(R.string.alert_message);
//    	adb.show();
//    }
    
    public void loadGps() {
    	Log.w(TAG , "loadGps" );
    	locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//    	locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, new GpsLocationListener()); 
//      isLoadGps = true;
    	
    	Criteria criteria = new Criteria();
    	criteria.setAccuracy(Criteria.ACCURACY_FINE);		// 정확도
    	criteria.setPowerRequirement(Criteria.POWER_LOW);	// 전원 소비량
    	criteria.setAltitudeRequired(false);				// 고도, 높이 값을 얻어 올지를 결정
    	criteria.setBearingRequired(false);
    	criteria.setSpeedRequired(false);					//속도
    	criteria.setCostAllowed(true);						//위치 정보를 얻어 오는데 들어가는 금전적 비용
    	provider = locationManager.getBestProvider(criteria, true);
    	listener = new GpsLocationListener();
    	locationManager.requestLocationUpdates(provider, 1000, 5, listener);
    }
    
    private class GpsLocationListener implements LocationListener {

    	public void onLocationChanged(Location location) {
    		Log.w(TAG , "onLocationChanged" );
		}

		public void onProviderDisabled(String provider) {
			Log.w(TAG , "onProviderDisabled" );
		}

		public void onProviderEnabled(String provider) {
			Log.w(TAG , "onProviderEnabled" );
		}

		public void onStatusChanged(String provider, int status, Bundle extras) {
			Log.w(TAG , "onStatusChanged" );
		}    	
    }
    
    protected void onStart() {
    	super.onStart();
    	if ( listener == null ) {
    		listener = new GpsLocationListener();
    		locationManager.requestLocationUpdates(provider, 1000, 5, listener);
    	}
    }
    
    protected void onStop() {
    	super.onStop();
    	locationManager.removeUpdates(listener);
    	listener = null;
    }
}